﻿using System;

namespace Framework
{
    public interface IModule
    {
        string moduleName { get; }
        ILoader ResLoader { get; }

        void RegisterController<TV>(IController<TV> controller, TV view) where TV : View;
        void UnRegisterController<TV>(IController<TV> controller) where TV : View;

        void RegisterModel(IModel model);
        void UnRegisterModel(IModel model);

        void RegisterService<TService>() where TService : IService;
        void UnRegisterService<TService>() where TService : IService;
        
        void AddView(View view);
        void ConnectView(View view);
        
        void OnShow(params object[] data);
        void OnHide();

        void Show();
        void Hide();

        void Destroy();
        void SetTopView();
        void ConnectView3D(View3D view3D);
    }
}